<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>

<script>


// 对象的深浅拷贝
// 针对深拷贝，需要使用其他办法，因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用，那么它也只指向那个引用。
var obj = {a: 1, b: 2, c: { a: 3 },d: [4, 5]}
var obj1 = obj
// 最佳深拷贝方案
var obj2 = JSON.parse(JSON.stringify(obj))//深拷贝常用方法
var obj3 = {...obj}
var obj4 = Object.assign({},obj)
obj.a = 999
obj.c.a = -999
obj.d[0] = 123
console.log(obj1) //{a: 999, b: 2, c: { a: -999 },d: [123, 5]}
console.log(obj2) //{a: 1, b: 2, c: { a: 3 },d: [4, 5]}
console.log(obj3) //{a: 1, b: 2, c: { a: -999 },d: [123, 5]}
console.log(obj4) //{a: 1, b: 2, c: { a: -999 },d: [123, 5]}

// 数组的拷贝
let arr = [1,2,3,[4,5],{a:1,b:2}];
let arr1 = arr;
let arr2 = JSON.parse(JSON.stringify(arr));
let arr3 = [...arr];
let arr4 = Object.assign({},arr);

arr[0] = 12;
arr[3][0] = 8;
arr[4].a = 'wag';
console.log(arr1);
console.log(arr2);
console.log(arr3);
console.log(arr4);



</script>
</html>